﻿/*  ----------------------------------------------------------------------------
 *  ITGROUP
 *  ----------------------------------------------------------------------------
 *  IBBA Infra Web
 *  ----------------------------------------------------------------------------
 *  File:       MenuService.asmx.cs
 *  Author:     ITGROUP\eduardog
 *  ----------------------------------------------------------------------------
 */
using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.Globalization;
using System.Web;
using System.Web.Script.Services;
using System.Web.Services;
using Microsoft.Practices.Unity;
using bba.framework.infraweb.interfaces.controller;
using bba.framework.infraweb.interfaces.baseinfra;
using bba.framework.infraweb.infrastructure.utility;
using bba.framework.infraweb.baseinfra.stat;

namespace bba.framework.infraweb.masterpage
{
    /// <summary>
    /// Serviço utilizado para expor via AJAX o resultado dos WebUserControls renderizados
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [ScriptService]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
    // [System.Web.Script.Services.ScriptService]
    public class MenuService : System.Web.Services.WebService
    {

        /// <summary>
        /// Construtor Default
        /// </summary>
        public MenuService()
        {
            IContextProvider contextProvider = new HttpContextProvider();
            PageController = contextProvider.GetContainer().Resolve<IMenuServiceController>();
        }

        #region Properties

        /// <summary>
        /// Propriedade responsável por definir os métodos e 
        /// eventos do serviço <seealso cref="bba.framework.infraweb.masterpage.MenuService"/>
        /// </summary>
        [Dependency]
        public IMenuServiceController PageController { get; set; }

        #endregion

        #region Methods Public

        /// <summary>
        /// Renderiza o WebUserControl passado como parâmetro posicionando a navegação nas features 
        /// e sistemas especificados
        /// </summary>
        /// <param name="featureId"></param>
        /// <param name="featureIdChild"></param>
        /// <param name="sistemaId"></param>
        /// <param name="viewPath"></param>
        /// <returns></returns>
        [WebMethod]
        public string GetRenderedView(int featureId, int featureIdChild, int sistemaId, string viewPath)
        {
            return ViewManager.RenderView(viewPath, featureId, featureIdChild, sistemaId);
        }

        /// <summary>
        /// Renderiza o WebUserControl passado como parâmetro posicionando a navegação nas features 
        /// e sistemas especificados
        /// </summary>
        /// <param name="featureId"></param>
        /// <param name="featureIdChild"></param>
        /// <param name="sistemaId"></param>
        /// <param name="currentPage"></param>
        /// <param name="displayWidth"></param>
        /// <returns></returns>
        [WebMethod]
        public string GetRenderedViewMenuItens(int featureId, int featureIdChild, int sistemaId, int currentPage, int displayWidth)
        {
            return ViewManager.RenderView(featureIdChild, featureId, sistemaId, currentPage, displayWidth);
        }

        /// <summary>
        /// Renderiza o WebUserControl passado como parâmetro posicionando a navegação nas features 
        /// e sistemas especificados,um nivel acima da navegacao corrente
        /// </summary>
        /// <param name="featureId"></param>
        /// <param name="featureIdChild"></param>
        /// <param name="sistemaId"></param>
        /// <param name="currentPage"></param>
        /// <param name="displayWidth"></param>
        ///<param name="move"></param>
        /// <returns></returns>
        [WebMethod]
        public string GetRenderedViewMenuItensBack(int featureId,
            int featureIdChild, int sistemaId, int currentPage, int displayWidth, bool move)
        {
            return ViewManager.RenderViewBack(featureIdChild, featureId, sistemaId, currentPage, displayWidth, move);
        }

        /// <summary>
        /// Retorna todos os itens de menu para pesquisa no autocomplete
        /// </summary>
        /// <returns></returns>
        [WebMethod]
        public string GetMenus()
        {
            return PageController.GetMenus();
        }

        /// <summary>
        /// Método responsável por carregar o(s) serviço(s) do autocomplete.
        /// </summary>
        /// <returns></returns>
        [WebMethod]
        public string GetLinks()
        {
            return PageController.GetLinks();
        }

        /// <summary>
        /// Método responsável por marcar alertas como não lidos
        /// </summary>
        /// <param name="valor"></param>
        [WebMethod]
        public void notRead(string valor)
        {
            PageController.NotReadAlert(valor);
        }

        /// <summary>
        /// Método responsável por excluir logicamente os alertas
        /// </summary>
        /// <param name="valor"></param>
        [WebMethod]
        public void deleteAlert(string valor)
        {
            PageController.DeleteAlert(valor);
        }

        /// <summary>
        /// Método responsável por contar os novos alertas do usuário
        /// </summary>
        /// <returns></returns>
        [WebMethod]
        public string CountNewAlert()
        {
            return PageController.CountNewAlert();
        }

        /// <summary>
        /// Método responsavel por remover o item <seealso cref="System.Web.SessionState.HttpSessionState"/> do cache, 
        /// este método foi criado, devido a necessidade de pegar o tempo final da sessão (session-end)
        /// utilizando o session state mode SQL.
        /// Mais informações em http://msdn.microsoft.com/en-us/library/ms178586.aspx
        /// </summary>
        [WebMethod]
        public void AbandonSession()
        {
            if (!String.IsNullOrEmpty(HttpContext.Current.Session.SessionID))
                new SessionEnd().UpdateState(HttpContext.Current.Session.SessionID);
        }

        /// <summary>
        /// Método responsável por criar o <seealso cref="AlertUser"/> do perfil do usuário, dessa forma é possivel
        /// obter as configurações de leitura exclusão do mesmo.
        /// </summary>
        /// <param name="idAlert"></param>
        [WebMethod]
        public void CreateAlertUser(int idAlert)
        {
            PageController.CreateAlertUser(idAlert);
        }

        /// <summary>
        /// Método responsável por recuperar o Thumbnail do usuário corrente da aplicação
        /// </summary>
        /// <param name="urlReceive"></param>
        /// <param name="utily"></param>
        /// <returns></returns>
        [WebMethod]
        public string getThumbnail(string urlReceive)
        {
            return PageController.GetThumbnail(urlReceive, Server);
        }

        #endregion



    }
}
